package com.cy.pj.sys.pojo.service.imp;

import com.cy.pj.common.annotation.RequiredLog;
import com.cy.pj.sys.pojo.dao.SysLogDao;
import com.cy.pj.sys.pojo.pojo.SysLog;
import com.cy.pj.sys.pojo.service.SysLogservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import java.util.List;
@Service//交给spring去管理
public class SysLogsServiceImpl implements SysLogservice {
    @Autowired
    private SysLogDao sysLogDao;

    /**
     * //此@Async注解描述的方法为异步切入点方法,这个会在切面通知方法中同过一个新的线程//底层是通过AOP调用的这个方法的//在AOP切面当中新的线程来调用这个方法
     * 个人理解:新的线程来自于springboot内置中
     *老师的讲的:这里的线程由springboot内置的线程池提供
     * @param sysLog
     */
    @Async
    @Override
    public void saveLog(SysLog sysLog) {
        //线程阻塞的时间
//        String tName = Thread.currentThread().getName();
//        System.out.println("SysLogService.saveLog.threadName="+tName);
//        try {
//        Thread.sleep(1000);
//    }catch (Exception e){};

        // 进行封装会报异常要把异常抛出在业务层的相对的抽象方法也要改成AsyncResult<封装的值>在抛总异常控制层也会抛异常
        //假如方法有返回值,此时我们要返回具体值的时候可以,
        // 异步执行需要以下方法的返回结果
        //return new AsyncResult<>(返回结果).get();
     sysLogDao.insertLog(sysLog);

    }
    @RequiredLog(operation = "删除日志")
    @Override
    public int deleteById(Long... ids) {

        return sysLogDao.deleteById(ids);
    }

    @Override
    public SysLog findById(Long id) {
        return sysLogDao.selectById(id);
    }

    @Override
    public List<SysLog> findLogs(SysLog sysLog) {
        return sysLogDao.selectLogs(sysLog);
    }
}
